"""
image_augment_config.py
-----------------------
定义图像数据增强的配置选项。
包括常用的空间变换、颜色变换和正则化增强等。
"""

from dataclasses import dataclass
from typing import Tuple, Union, List


@dataclass
class ImageAugmentConfig:
    """
    图像增强配置类，用于灵活控制各种数据增强操作。
    每个增强项可独立启用或关闭，适合在训练、验证等不同阶段使用。
    """
    # === 启用总开关 ===
    use_augmentation: bool = False   # 是否启用增强操作，若为 False 则仅执行基本预处理

    # === 几何变换增强 ===
    random_crop: bool = False         # 随机裁剪
    random_flip: bool = False         # 随机水平翻转
    random_rotation: bool = False    # 随机旋转
    random_affine: bool = False      # 仿射变换（旋转+平移+缩放）
    random_resize_crop: bool = False # 随机缩放+裁剪
    random_perspective: bool = False # 透视变换（模拟视角变化）

    # === 颜色与光照增强 ===
    color_jitter: bool = False       # 随机调整亮度/对比度/饱和度/色调
    grayscale: bool = False          # 随机转为灰度图
    gaussian_blur: bool = False      # 高斯模糊
    random_erasing: bool = False     # 随机擦除部分区域（用于正则化）
    equalize: bool = False           # 直方图均衡化（增强对比度）
    solarize: bool = False           # 曝光增强（反转高亮区域）
    posterize: bool = False          # 色彩量化（减少颜色层级）

    # === 正则化增强（通常用于 batch 层面） ===
    cutout: bool = False             # Cutout：随机遮盖图像区域
    mixup: bool = False              # Mixup：图像混合增强（在 DataLoader 层实现）
    cutmix: bool = False             # CutMix：区域拼接增强（在 DataLoader 层实现）

    # === 概率控制 ===
    augment_prob: float = 0.5        # 每种增强操作的应用概率（部分操作使用）

    # === Tensor与归一化控制 ===
    to_tensor: bool = False           # 是否将PIL或numpy图像转换为Tensor
    normalize: bool = False           # 是否执行归一化
    mean: Union[Tuple[float, ...], List[float]] = (0.5, 0.5, 0.5)
    std: Union[Tuple[float, ...], List[float]] = (0.5, 0.5, 0.5)
